package br.com.abenildo.modelo;

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.abenildo.controle.Deficiente;
import br.com.abenildo.exception.DeficienteNaoEncontradoException;
import br.com.abenildo.exception.RepositorioException;

public abstract class RepositorioDeficienteArray implements IRepositorioDeficiente {
	
	private Deficiente[] deficientes;
	private int indice;
	
	public static final int Default = 100;
	
	public RepositorioDeficienteArray(){
		deficientes = new Deficiente[Default];
		indice = 0;
	}
	
	 RepositorioDeficienteArray(Deficiente[] deficientes,int indice){
		this.deficientes = deficientes;
		this.indice = indice;
	}
	 
	  public void inserirDeficiente (Deficiente deficiente) throws RepositorioException {
		 deficientes[indice] = deficiente;
		 indice = indice + 1; 
	 }
	 
	   public void removerDeficiente (String cpf) throws DeficienteNaoEncontradoException{
		  int i = getIndice(cpf);
		  deficientes[i] = deficientes[indice - 1];
		  indice = indice - 1;
		  deficientes[indice] = null;
	  }
	  
	    public Deficiente procurarDeficiente(String cpf) throws DeficienteNaoEncontradoException{
		   int i = getIndice(cpf);
		   return deficientes[i];
	   }
	   
	    public void atualizarDeficiente(Deficiente deficiente)throws DeficienteNaoEncontradoException{
		   int i = getIndice(deficiente.getCpf());
		   System.out.print(i);
		   deficientes[i] = deficiente;
	   }
	   
	    public boolean existe (String cpf) {
	    	boolean resposta;
	    	
	    	try{
	    		getIndice(cpf);
	    		resposta = true;
	 
	    	}
	    		catch(DeficienteNaoEncontradoException ex){
	    			
	    			resposta = false;
	    		}
	    			return resposta;
	    		
	    		}
	    
	    	  private int getIndice(String cpf) throws DeficienteNaoEncontradoException {
	    		  int resposta = -1;
	    		  boolean achou = false;
	    		  
	    		  for(int i = 0; !achou && (i < indice); i = i + 1){
	    			  if(deficientes[i].getCpf().equals(cpf)){
	    				  resposta = i;
	    				  achou = true;
	    			  }
	    		  }
	    		  //SE FOR DIFERENTE DO QUE ACHOU LEVANTE UMA NOVA EXCESSAO
	    		  if(!achou) throw new DeficienteNaoEncontradoException(cpf); 
	    			  return resposta;
	    }
	    	  
	    	  public ArrayList<Deficiente> Listar(){
	    		  ArrayList<Deficiente>lista = new ArrayList<Deficiente>();
	    		  for(int z = 0; z <= this.indice; z++){
	    			  if(deficientes[z] != null)lista.add(deficientes[z]);
	    		  }
	    		   return lista;
	    	  }

	    	  public void salvarDeficiente(List<Deficiente> deficiente) throws FileNotFoundException {
	    		  
	    		  PrintWriter pw = new PrintWriter("deficiente.txt");
			 		 for(Deficiente d :  deficiente){
			 		 pw.print(d);
			 	 }
			 		 pw.flush();
			 		 pw.close();
	    	  }
}
